package utilities;

import java.util.Comparator;

import services.ConfiguracaoPesosService;

import entidades.ConfiguracaoPesos;
import entidades.ItemCotacao;

public class CompararItemCotacao implements Comparator<ItemCotacao> {

	private int somaCot1;
	private int somaCot2;
	
	private int desempate;
	private int praQuem;

	@Override
	public int compare(ItemCotacao arg0, ItemCotacao arg1) {
		somaCot1 = 0;
		somaCot2 = 0;
		ConfiguracaoPesos config = new ConfiguracaoPesosService()
				.exibirConfiguracaoPesos();
		// condicao pgto
		if (arg0.getCondicaoPagamento().getIdCondicaoPagamento() > arg1
				.getCondicaoPagamento().getIdCondicaoPagamento()) {
			somaCot1 += config.getCondicaoPagamento();
			desempate = config.getCondicaoPagamentoDes(); 
			praQuem = -1;
		} else if (arg0.getCondicaoPagamento().getIdCondicaoPagamento() < arg1
				.getCondicaoPagamento().getIdCondicaoPagamento()) {
			somaCot2 += config.getCondicaoPagamento();
			desempate = config.getCondicaoPagamentoDes(); 
			praQuem = 1;
		} else {
			somaCot1 += config.getCondicaoPagamento();
			somaCot2 += config.getCondicaoPagamento();

		}
		// prazo entrega
		if (arg0.getPrazoEntrega().getTime() < arg1.getPrazoEntrega().getTime()) {
			somaCot1 += config.getPrazoEntrega();
			if(desempate < config.getPrazoEntregaDes() || praQuem == 0){
				desempate = config.getPrazoEntregaDes();
				praQuem = -1;
			}else if(desempate == config.getPrazoEntregaDes() && praQuem == 1){
				praQuem = 0;
			}

		} else if (arg0.getPrazoEntrega().getTime() > arg1.getPrazoEntrega()
				.getTime()) {
			somaCot2 += config.getPrazoEntrega();
			if(desempate < config.getPrazoEntregaDes() || praQuem == 0){
				desempate = config.getPrazoEntregaDes();
				praQuem = 1;
			}else if(desempate == config.getPrazoEntregaDes() && praQuem == -1){
				praQuem = 0;
			}

		} else {
			somaCot1 += config.getPrazoEntrega();
			somaCot2 += config.getPrazoEntrega();

		}

		// tipo frete
		if (arg0.getTipoFrete() < arg1.getTipoFrete()) {
			somaCot1 += config.getTipoFrete();
			if(desempate < config.getTipoFreteDes() || praQuem == 0){
				desempate = config.getTipoFreteDes();
				praQuem = -1;
			}else if(desempate == config.getTipoFreteDes() && praQuem == 1){
				praQuem = 0;
			}

		} else if (arg0.getTipoFrete() > arg1.getTipoFrete()) {
			somaCot2 += config.getTipoFrete();
			if(desempate < config.getTipoFreteDes() || praQuem == 0){
				desempate = config.getTipoFreteDes();
				praQuem = 1;
			}else if(desempate == config.getTipoFreteDes() && praQuem == -1){
				praQuem = 0;
			}

		} else {
			somaCot1 += config.getTipoFrete();
			somaCot2 += config.getTipoFrete();

		}

		// valor
		if (arg0.getValorUnit() < arg1.getValorUnit()) {
			somaCot1 += config.getValor();
			if(desempate < config.getValorDes() || praQuem == 0){
				desempate = config.getValorDes();
				praQuem = -1;
			}else if(desempate == config.getValorDes() && praQuem == 1){
				praQuem = 0;
			}

		} else if (arg0.getValorUnit() > arg1.getValorUnit()) {
			somaCot2 += config.getValor();
			if(desempate < config.getValorDes() || praQuem == 0){
				desempate = config.getValorDes();
				praQuem = 1;
			}else if(desempate == config.getValorDes() && praQuem == -1){
				praQuem = 0;
			}
		} else {
			somaCot1 += config.getValor();
			somaCot2 += config.getValor();
		}

		if (somaCot1 > somaCot2) {
			return -1;
		} else if (somaCot2 > somaCot1) {
			return 1;
		} else {
			// criterio de desempate
			return praQuem;
		}
	}

}
